
class Node(object):
    ''' 链表节点 '''
    def __init__(self, val, p):
        '''
            data 节点中的值
            next 下一个节点的地址（引用、指针）
        '''
        self.data = val
        self.next = p
#
class LinkListDemo(object):
    def __init__(self):
        #初始化链表的时候，默认头结点指向的地址为None
        self.head = None;
        
    def insert(self, val):
        #实例化一个节点对象，并把链表头结点的地址给该对象
        next = Node(val,self.head)
        #修改链表头结点的地址
        self.head = next;

    def getLength(self):
        length = 0
        node = self.head
        while node!=None:
            length += 1;
            node = node.next;
        return length;

    def delete(self, data):
        ''' 删除指定的数据
        如果有重复的数据只删除第一个 '''
        node = self.head
        prevNode = self.head
        while node != None:
            if node.data == data:
                #删除当前节点
                #如果删除的是头结点
                if self.head.data == data:
                    #修改头结点的地址为 头结点的后继节点
                    self.head = self.head.next
                else:
                    #修改前驱节点的后继节点为，当前节点的后继节点
                    prevNode.next = node.next
                return True;
            else:
                prevNode = node
                node = node.next;
        return False

    def get(self, val):
        node = self.head
        while node != None:
            if node.data == val:
                return node.data
        else:
            return None


    def clear(self):
        self.head = None

    def is_empty(self):
        if self.head == None:
            return True
        else:
            return False

    def print(self):
        node = self.head
        print('链表打印开始！---------------------')
        while node != None:
            print(node.data);
            node = node.next
        else:
            print('链表打印结束！---------------------')
